//package org.ragdollcat.first.manager;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.io.FileUtil;
//import cn.hutool.core.util.ArrayUtil;
//import cn.hutool.core.util.NumberUtil;
//import cn.hutool.core.util.ObjUtil;
//import cn.hutool.core.util.RandomUtil;
//import com.qcloud.cos.model.PutObjectResult;
//import com.qcloud.cos.model.ciModel.persistence.CIObject;
//import com.qcloud.cos.model.ciModel.persistence.ImageInfo;
//import com.qcloud.cos.model.ciModel.persistence.ProcessResults;
//import lombok.extern.slf4j.Slf4j;
//import net.bytebuddy.implementation.bytecode.Throw;
//import org.ragdollcat.first.config.CosClientConfig;
//import org.ragdollcat.first.exception.BusinessException;
//import org.ragdollcat.first.exception.ErrorCode;
//import org.ragdollcat.first.exception.ThrowUtils;
//import org.ragdollcat.first.model.dto.picture.UploadPictureResult;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.Resource;
//import java.io.File;
//import java.util.Arrays;
//import java.util.Date;
//import java.util.List;
//import java.util.Random;
//
///**
// * 文件管理类
// * 偏业务
// */
//@Slf4j
//@Service
//@Deprecated
//public class FileManager {
//
//    @Resource
//    private CosManager cosManager;
//
//
//    @Resource
//    private CosClientConfig cosClientConfig;
//
//
//    /**
//     * 上传文件
//     *
//     * @param multipartFile 文件数据
//     * @param uploadPrefix  前缀
//     * @return
//     */
//    public UploadPictureResult uploadPicture(MultipartFile multipartFile, String uploadPrefix) {
//        //校验参数
//        this.vaildParams(multipartFile);
//
//        //重构文件名 例：2025-08-17_ArDerNqpvVVEfVOj.jpg 为什么要重构文件名？为了防止文件名中有&=等特殊符号导致请求出现问题
//        String fileName = this.overwriteFileName(multipartFile);
//
//        //上传文件
//        //前缀 拼接上文件名  /picture/xxxxx/2025-08-17_ArDerNqpvVVEfVOj.jpg
//        String filePath = String.format("%s/%s", uploadPrefix, fileName);
//        File file = null;
//        try {
//            file = File.createTempFile(filePath, null);
//            multipartFile.transferTo(file);
//            PutObjectResult putObjectResult = cosManager.putPictureObject(filePath, file);
//            //解析结果
//            ImageInfo imageInfo = putObjectResult.getCiUploadResult().getOriginalInfo().getImageInfo();
//
//            //得到处理结果
//            ProcessResults processResults = putObjectResult.getCiUploadResult().getProcessResults();
//            List<CIObject> objectList = processResults.getObjectList();
//            if (CollUtil.isNotEmpty(objectList)){
//                CIObject ciObject = objectList.get(0);
//                Integer width = ciObject.getWidth();
//                Integer height = ciObject.getHeight();
//                return new UploadPictureResult(
//                        "https://" + cosClientConfig.getHost() + ciObject.getKey(),
//                        FileUtil.mainName(multipartFile.getOriginalFilename()),
//                        multipartFile.getSize(),
//                        width,
//                        height,
//                        NumberUtil.round(width * 1.0 / height, 2).doubleValue(),
//                        ciObject.getFormat());
//            }
//
//            int width = imageInfo.getWidth();
//            int height = imageInfo.getHeight();
//            return new UploadPictureResult(
//                    "https://" + cosClientConfig.getHost() + filePath,
//                    FileUtil.mainName(multipartFile.getOriginalFilename()),
//                    multipartFile.getSize(),
//                    width,
//                    height,
//                    NumberUtil.round(width * 1.0 / height, 2).doubleValue(),
//                    imageInfo.getFormat()
//            );
//        } catch (Exception e) {
//            log.error("上传文件出现异常，路径：{}", filePath, e);
//            throw new BusinessException(ErrorCode.OPERATION_ERROR, "上传文件失败");
//        } finally {
//            this.clearTemporaryFile(file);
//        }
//
//    }
//
//    private void clearTemporaryFile(File file) {
//        if (ObjUtil.isNotEmpty(file)) {
//            boolean delete = file.delete();
//            if (!delete) {
//                log.error("临时文件删除错误");
//            }
//        }
//    }
//
//    /**
//     * 重构文件名：Snipaste_2025-08-17_17-56-45.png => 2025-08-17_ArDerNqpvVVEfVOj.png
//     *
//     * @param multipartFile
//     * @return
//     */
//    private String overwriteFileName(MultipartFile multipartFile) {
//
//        //1.生成16位数随机字符串
//        //ArDerNqpvVVEfVOj
//        String randomUUID = RandomUtil.randomString(16);
//        //2.获取当前时间
//        //2025-08-17
//        String date = DateUtil.formatDate(new Date());
//        //获取文件后缀
//        //png
//        String suffix = FileUtil.getSuffix(multipartFile.getOriginalFilename());
//        return String.format("%s_%s.%s", date, randomUUID, suffix);
//    }
//
//    /**
//     * 校验参数
//     *
//     * @param multipartFile 文件对象
//     */
//    private void vaildParams(MultipartFile multipartFile) {
//        ThrowUtils.throwIf(ObjUtil.isEmpty(multipartFile), ErrorCode.PARAMS_ERROR, "'MultipartFile'不能为空");
//        //校验大小
//        final long standardSize = 1024 * 1024 * 2;
//        long size = multipartFile.getSize();
//        ThrowUtils.throwIf(size > standardSize, ErrorCode.OPERATION_ERROR, "图片大小不能大于2MB");
//        //校验格式
//        //hutool工具包，根据文件名获取后缀
//        String suffix = FileUtil.getSuffix(multipartFile.getOriginalFilename());
//        List<String> standardFormat = Arrays.asList("jpg", "png", "webp", "jpeg");
//        ThrowUtils.throwIf(!standardFormat.contains(suffix), ErrorCode.OPERATION_ERROR, "目前支持的图片格式：jpg，png，webp，jpeg");
//    }
//
//
//}
